Well known software code commonly contained in portable executable file format also known as PE file format, mainly includes information to be used by a well known Windows™ process loader. PE files are well known EXE or DLL files that are provided by the operating system and/or by an installed software application intended to run within the respective Windows™ operating system.
Upon initializing of a software application, the process loader commonly creates new processes in the operation system and uses the loaded PE image to determine various starting properties such as which memory addresses to initially allocate, how much stack space is required and the like as is well known in the art. The process loader also consults the PE image to determine what additional DLLs should be loaded before the process begins executing. These DLLs are commonly known as implicitly referenced DLLs.
DLL files may optionally specify what is known as Thread Local Storage Data Directory Element [TLS]. TLS instructs, via the process loader, the operating system to allocate and initialize a specific amount of data for each thread created while the related application is running. This is sometimes necessary so that individual threads can read and write data without interference from other threads. A thread is a well known part of a program that can execute independently of other program parts and eventually concurrently with other thread(s).
During runtime of the related application, the size of the initially allocated and initialized data cannot be changed since it would interfere with thread access. Hence, the Windows™ process loader processes only TLS information for implicitly referenced DLL files.
There are a number of shortcomings that come with the process loader's automatic loading of implicitly referenced DLLs prior to application run. The process loader has limited facilities for programmatically determining where a DLL should be loaded from and which version should be used. The process loader does not provide facilities for loading DLLs from data streams, compressed archives, or application specific encrypted storage. The process loader significantly limits a streamlined application startup during which only immediately needed DLLs are loaded. Therefore, there exists a need for dynamically and programmatically loading DLLs during runtime of the respective application. The present invention addresses this need.